﻿// ***********************************************************************
// Assembly         : Delta_control
// Author           : Juan Alberto Cerino Gomez
// Created          : 02-23-2013
//
// Last Modified By : Juan Alberto Cerino Gomez
// Last Modified On : 06-04-2013
// ***********************************************************************
// <copyright file="Control_campo_tecnico.cs" company="Delta Bussines">
//     Copyright (c) 2013  Delta Bussines. All rights reserved.
// </copyright>
// <summary></summary>
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Delta_bussines.Base;
using Delta_entidad.EntidadesControl;
using System.Data;
using Delta_util.Clases;
using System.Linq.Expressions;

namespace Delta_control.Control_Admin
{
    /// <summary>
    /// Control que se encarga de procesar las solicitudes de la configuración dinámica de los tipos de datos.
    /// </summary>
    [Serializable()]
    public class Control_campo_tecnico : Base.ControlBase<Cat_tipo_gral>
    {

        /// <summary>
        /// Variable que representa la persistencia que usa este control.
        /// </summary>
        public Delta_bussines.PersistenciaControl.PerDatosDinamicos persistencia = new Delta_bussines.PersistenciaControl.PerDatosDinamicos();

        /// <summary>
        /// Metodo que se encarga de importar las columnas de una tabla enlazada a un tipo general.
        /// </summary>
        /// <param name="id_tipo">Clave del tipo general del cual se quiere importar las columnas.</param>
        public void ImportarDatosDeTabla(int id_tipo)
        {

            Delta_bussines.Base.PerConfig<Cat_campo_tecnico> perCampos = new PerConfig<Cat_campo_tecnico>();
            try
            {

                Cat_tipo_gral datosTipo = persistencia.ObtenerCamposUserTipo(null, id_tipo);

                persistencia.ProcesoConTransaccion();
                if (string.IsNullOrWhiteSpace(datosTipo.consulta))
                    persistencia.ImportarDatosDeTabla(id_tipo);
                else
                {
                    persistencia.ObtenerConexion(true);
                    //Aqui se ejecuta el query para obtener las conlumnas a insertar
                    DataTable dt = persistencia.EjecutarComando(datosTipo.consulta);

                    foreach (DataColumn columna in dt.Columns)
                    {
                        Cat_campo_tecnico ndatos = new Cat_campo_tecnico();
                        ndatos.id_tipo_gral = datosTipo.id_tipo_gral;
                        ndatos.nombre = columna.ColumnName;
                        ndatos.mostrar_tabla = true;
                        ndatos.es_virtual = true;
                        ndatos.solo_lectura = true;
                        ndatos.id_tipo_columna = 1;
                        ndatos.titulo = columna.ColumnName;
                        ndatos.tamanio = Comun.Convertir<Int16>(columna.MaxLength);
                        perCampos.Insertar<Cat_campo_tecnico>(ndatos, persistencia);

                    }

                }
                persistencia.FinalizarTransaccion();
            }
            catch (Exception ex)
            {
                persistencia.FinalizarTransaccion(false);
                ProcesarExcepcion(ex);
            }
            finally
            {
                persistencia.LiberarConexion();

            }


        }




    }
}
